﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ECOSYSTEM_BL;
using ECOSYSTEM_Dominio;

namespace ECOSYSTEMPRESENTACION
{
    public partial class frmDesactivarSerie : Form
    {
        public frmDesactivarSerie()
        {
            InitializeComponent();
        }
        Serie laSerie = new Serie();
        SerieBL laSerieBL = new SerieBL();
        Boolean res;
        Int32 CodigoProd;
        public InterfazSerie Manipular { set; get; }
        public void EnviarDatosSerieVendido(String TipoComprob, Int32 IDComprob) {
            ActivarSeriesDesactivasPorVenta();
            for (int i = 0; i <= dgvListaSerieDesactivar.Rows.Count - 1; i++) {
                if(Convert.ToString(dgvListaSerieDesactivar["Identificador",i].Value) == "N")
                    GuardarSerieVendida(Convert.ToInt32(dgvListaSerieDesactivar["SerieIDD", i].Value),TipoComprob, IDComprob);
            }
        }
        public Boolean GuardarSerieVendida(Int32 SerieIDV, String TComprob, Int32 IDCom) {
            laSerie.SerieID = SerieIDV;
            laSerie.FecSalidaSerie = DateTime.Now.ToShortDateString();
            laSerie.Estado = "VENDIDO";
            laSerie.TipoComprobanteVenta = TComprob;
            laSerie.ComprobanteIDVenta = IDCom;
            laSerieBL.DesactivarSerieVenta(laSerie);
            return true;
        }
        public void CargarSeriePorProducto(Int32 CodProd)
        {
            CodigoProd = CodProd;
            dgvListaSerieActivas.DataSource = null;
            if (dgvListaSerieActivas.DataSource == null) {
                dgvListaSerieActivas.DataSource = laSerieBL.ObtenerSeriePorProducto(CodProd);
                filtrador.DataSource = laSerieBL.ObtenerSeriePorProducto(CodProd);
            }
           PonerNombre();
        }
        private void PonerNombre() { 
            if(dgvListaSerieActivas.Rows.Count>0)
                lblNameProduc.Text = Convert.ToString(dgvListaSerieActivas["NameProduc", 0].Value);
        }
        public void CargarSeriesDeComprobanteVenta(Int32 IDComprobante, String TipoComprobante) {                      
            List<Serie> lista;
            lista = laSerieBL.ObtenerListaSeriePorComprovanteVenta(IDComprobante, TipoComprobante);
            if (lista.Count > 0) {
                foreach (Serie fila in lista) {
                    dgvListaSerieDesactivar.Rows.Add(fila.ProductoID.ToString(), fila.NroSerie.ToString(),fila.SerieID,"R");
                }
            }
        }
        private void AplicarFiltro()
        {
            int ret = filtrar_dgvListaProducto("SERIE PRODUCTO ACTIVO", txtFiltrarSerie.Text.Trim(), filtrador, dgvListaSerieActivas);

            if (ret == 0)
            {
                txtFiltrarSerie.BackColor = Color.Red;
            }
            else
            {
                txtFiltrarSerie.BackColor = Color.White;
            }

        }
        private int filtrar_dgvListaProducto(String Columna, String texto, BindingSource Binding, DataGridView data)
        {
            if (filtrador.DataSource == null) { return 0; }
            try
            {
                String filtro = String.Empty;
                filtro = "LIKE '" + texto.Trim() + "%'";
                if (filtro != String.Empty)
                {
                    filtro = "[" + Columna + "]" + filtro;
                }
                Binding.Filter = filtro;
                data.DataSource = Binding.DataSource;
                return Binding.Count;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return 0;
        }
        private Boolean VerificarLista(String Cadena)
        {
            for (int i = 0; i <= dgvListaSerieDesactivar.Rows.Count - 1; i++)
            {
                if (dgvListaSerieDesactivar["SerieD", i].Value.ToString() == Cadena)
                {
                    res = false;
                    MessageBox.Show("La Serie ya se en la lista");
                    break;
                }
                res = true;
            }
            return res;
        }
        public void EliminarSerieListaDesactivasDGVLISTASERIEDESACTIVAR(Int32 CodProdi)
        {
            Int32 nroElem = dgvListaSerieDesactivar.Rows.Count;
            for (int i = nroElem - 1; i >= 0; i--)
            {
                if (Convert.ToInt32(dgvListaSerieDesactivar["ProductoID", i].Value) == CodProdi)
                {
                    if (Convert.ToString(dgvListaSerieDesactivar["Identificador", i].Value) == "R")
                    {
                        dgvParaEliminar.Rows.Add(dgvListaSerieDesactivar["SerieIDD", i].Value);
                        dgvListaSerieDesactivar.Rows.RemoveAt(i);
                    }
                    else
                        dgvListaSerieDesactivar.Rows.RemoveAt(i);
                }
                nroElem = dgvListaSerieDesactivar.Rows.Count;
            }
        }
        public void ActivarSeriesDesactivasPorVenta()
        {
            if (dgvParaEliminar.Rows.Count > 0)
            {
                for (int i = 0; i <= dgvParaEliminar.Rows.Count - 1; i++)
                {
                    laSerieBL.ActivarSerieVendida(Convert.ToInt32(dgvParaEliminar["SerieID", i].Value));
                }
            }
        }
        private void VerificarCantidadSerieIngresa() {
            lblCantidad.Text = Convert.ToString(Convert.ToInt32(lblCantidad.Text) - 1);
            if (lblCantidad.Text == "0")
            {
                txtFiltrarSerie.ReadOnly = true;
                dgvListaSerieActivas.Enabled = false;
                dgvListaSerieActivas.ClearSelection();
                lblNameProduc.Text = "";
            }
            else
            {
                txtFiltrarSerie.Select();
                txtFiltrarSerie.ReadOnly = false;
                dgvListaSerieActivas.Enabled = true;
            }
        }
        Int32 cantidad;
        public Int32 CantidadProducto(Int32 CodProd)
        {
            try
            {
                Int32 can = 0;
                for (int i = 0; i <= dgvListaSerieDesactivar.Rows.Count - 1; i++)
                {
                    if (Convert.ToInt32(dgvListaSerieDesactivar["ProductoID", i].Value) == CodProd)
                    {
                        can = can + 1;
                    }
                    cantidad = can;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            return cantidad;
        }
        //--> EVENTOS <--

        private void btnSalir_Click(object sender, EventArgs e)
        {
            if (Application.OpenForms["frmGarantia"] == null)
            {
                dgvListaSerieActivas.DataSource = null;
                this.Visible = false;
            }
            else
            {
                this.Close();
            }
            
        }

        private void txtFiltrarSerie_TextChanged(object sender, EventArgs e)
        {
            AplicarFiltro();
        }

        private void dgvListaSerieActivas_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {                
                Int32 numfila = Int32.Parse(e.RowIndex.ToString());
                if (Application.OpenForms["frmGarantia"] == null)
                {
                    if (dgvListaSerieDesactivar.Rows.Count > 0)
                    {
                        if (VerificarLista(dgvListaSerieActivas["SERIE PRODUCTO ACTIVO", numfila].Value.ToString()))
                        {
                            dgvListaSerieDesactivar.Rows.Add(CodigoProd, dgvListaSerieActivas["SERIE PRODUCTO ACTIVO", numfila].Value, dgvListaSerieActivas["SerieID", numfila].Value, "N");
                            dgvListaSerieActivas.Rows.RemoveAt(numfila);
                            VerificarCantidadSerieIngresa();
                        }
                    }
                    else
                    {
                        dgvListaSerieDesactivar.Rows.Add(CodigoProd, dgvListaSerieActivas["SERIE PRODUCTO ACTIVO", numfila].Value, dgvListaSerieActivas["SerieID", numfila].Value, "N");
                        dgvListaSerieActivas.Rows.RemoveAt(numfila);
                        VerificarCantidadSerieIngresa();
                    }
                }
                else {
                    Manipular.cargarSerie(Convert.ToString(dgvListaSerieActivas["SERIE PRODUCTO ACTIVO", numfila].Value),Convert.ToString(dgvListaSerieActivas["SerieID", numfila].Value));
                    this.Close();
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void dgvListaSerieDesactivar_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.ColumnIndex == dgvListaSerieDesactivar.Columns["Eliminar"].Index) {
                    txtFiltrarSerie.Select();
                    if (Convert.ToString(dgvListaSerieDesactivar["Identificador", e.RowIndex].Value) == "R")
                    {
                        dgvParaEliminar.Rows.Add(dgvListaSerieDesactivar["SerieIDD", e.RowIndex].Value);
                        CargarSeriePorProducto(Convert.ToInt32(dgvListaSerieDesactivar["ProductoID", e.RowIndex].Value));
                        dgvListaSerieDesactivar.Rows.RemoveAt(e.RowIndex);                        
                    }
                    else {
                        CargarSeriePorProducto(Convert.ToInt32(dgvListaSerieDesactivar["ProductoID", e.RowIndex].Value));
                        dgvListaSerieDesactivar.Rows.RemoveAt(e.RowIndex);
                    }
                    lblCantidad.Text = Convert.ToString(Convert.ToInt32(lblCantidad.Text) + 1);
                    dgvListaSerieActivas.Enabled = true;
                    txtFiltrarSerie.ReadOnly = false;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
    }
}
